const jwt = require('jsonwebtoken');
const {createUser, getUserInfo,updateById} = require('../service/user.service');
const {userRegisterError} = require('../constant/err.type')
const {JWT_SECRET} = require('../config/config.default')
// 控制器
class UserController  {
  //注册
  async register(ctx, next) {
    //1.获取数据
    const { user_name, password } = ctx.request.body
    //对拿到的数据进行验证：合法性和合理性
    //2.操作数据库
    try {
      const res = await createUser(user_name, password)
      //3.返回响应
      ctx.body = {
        code: 200,
        message: '用户注册成功',
        data: {
          id: res.id,
          user_name: res.user_name,
          is_admin: res.is_admin
        }
      }
    } catch (err) {
      console.error(err);
      ctx.app.emit('error', userRegisterError, ctx)

    }

  }
  //登录
  async login(ctx,next) {
    const { user_name} = ctx.request.body
    //1.获取用户信息(在token的payload中，记录id，username，is admin)
    try {
      //从返回结果对象中剔除password，将剩下的属性放到res对象
     const{password,...res}= await getUserInfo({user_name})
     ctx.body={
      code:200,
      message:'用户登录成功',
      data:{
        token:jwt.sign(res,JWT_SECRET,{expiresIn:'1d'}) //1d表示1天
      } 
     }
      
    }catch (err) {
      console.error('登录失败',err);
      
    }
  }

  //修改密码
  async changePassword(ctx,next) {
    //1.获取数据
     const id = ctx.state.user.id
     const {password} = ctx.request.body
     try {
          //2.操作数据库
      const res = await updateById({id,password}) 
          //3.返回响应
      if(res){
        ctx.body={
          code:200,
          message:'修改密码成功',
          data:''
        } 
      }
     } catch (err) {
      console.error('修改密码失败',err);
     }   
     
  }
}

module.exports = new UserController()